package top.v5it.japi.plus.core.spring.web;

import java.lang.annotation.*;
import java.util.stream.Stream;

/**
 * 数据脱敏加解密注解
 * <p>
 * 应用controller层，标识方法请求与响应数据进行脱敏处理
 * </p>
 *
 * @author zhanpu
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
public @interface JapiEada {

    /**
     * 类型
     *
     * @return
     */
    Type type() default Type.ENCRYPT;

    /**
     * 是否加密
     *
     * @return
     */
    boolean isEncrypt() default true;

    /**
     * 是否解密
     *
     * @return
     */
    boolean isDecrypt() default true;

    /**
     * 类型
     */
    enum Type {

        /**
         * 密文
         */
        ENCRYPT,

        /**
         * 明文
         */
        PLAINTEXT;

        public static Type match(String name) {
            return Stream
                    .of(values())
                    .filter(v -> v.name().equals(name))
                    .findFirst()
                    .orElse(null);
        }
    }
}
